<!-- 在script 标签上使用setup，可以不用再使用return的写法了 -->
<!-- 其中 setup 标记的 script 必须是单独的，不能和export等其他共用 -->
<!-- 可以使用  npm i vite-plugin-vue-setup-extend -D 插件替换下面的写法，直接将组件名称定义写到script的name属性上 -->
<!--<script lang="ts">
export default {
  name: 'Person',
}
</script>-->

<!-- 可以使用  npm i vite-plugin-vue-setup-extend -D 插件替换下面的写法，直接将组件名称定义写到script的name属性上 -->
<!-- 如果没有定义组件名称，没有给script写name定义组件名称的话，默认就是组件的名称。 -->
<script setup lang="ts" name="Person">
import { ref } from 'vue'

// 创建一个title2，用于存储ref标记的内容。
// ref 作为 DOM 引用（DOM Reference）。
// 获取对 真实 DOM 元素 的引用：当 Vue 渲染模板时，会把带有 ref="xxx" 的元素自动赋值给同名的 ref() 变量。
let title1 = ref() // title1.value 将指向 <h1>中国</h1> 这个 DOM 节点。常用于操作 DOM（如聚焦、滚动、动画等）。
let title2 = ref()
let title3 = ref()

// 创建一个响应式的变量，可以被 Vue 跟踪变化并触发视图更新。
// ref 作为 响应式数据（Reactive Data）
let a = ref(1)
let b = ref(2)
let c = ref(3)

function showLog() {
  console.log('Hello Person', title1.value)
  console.log('Hello Person', title2.value)
  console.log('Hello Person', title3.value)
}

// 需要组件主动导出，才可以在组件实例引用看到该实例属性
defineExpose({ a, b, c })
</script>

<template>
  <div class="person">
    <h1 ref="title1">中国</h1>
    <h1 ref="title2">北京</h1>
    <h1 ref="title3">尚硅谷</h1>
    <button @click="showLog()">点我输出h2这个元素</button>
  </div>
</template>

<style scoped>
.person {
  background-color: #dab649;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}

button {
  margin: 0 10px;
}
</style>
